package com.lzy.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import com.lzy.common.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 角色信息表
 * 
 * @author lyw
 * @email lyw@gmail.com
 * @date 2023-02-02 17:06:20
 */
@Data
@TableName("sys_role")
@ApiModel("角色信息表")
public class SysRoleEntity extends BaseEntity {
	private static final long serialVersionUID = 1L;

	/**
	 * 角色ID
	 */
	@TableId
	private Long roleId;
	/**
	 * 角色名称
	 */
	@ApiModelProperty("角色名称")
	@NotBlank(message = "角色名称不能为空")
	@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
	private String roleName;
	/**
	 * 角色权限字符串
	 */
	@ApiModelProperty("角色权限字符串")
	@NotBlank(message = "权限字符不能为空")
	@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
	private String roleKey;
	/**
	 * 部门组（数据权限）
	 */
	@TableField(exist = false)
	@ApiModelProperty("部门组（数据权限）")
	private Long[] deptIds;
	/**
	 * 菜单组
	 */
	@TableField(exist = false)
	@ApiModelProperty("菜单组")
	private Long[] menuIds;
	/**
	 * 显示顺序
	 */
	@NotBlank(message = "显示顺序不能为空")
	@ApiModelProperty("显示顺序")
	private Integer roleSort;
	/**
	 * 数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
	 */
	@ApiModelProperty("数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）")
	private String dataScope;
	/**
	 * 菜单树选择项是否关联显示
	 */
	@ApiModelProperty("菜单树选择项是否关联显示")
	private Integer menuCheckStrictly;
	/**
	 * 部门树选择项是否关联显示
	 */
	@ApiModelProperty("部门树选择项是否关联显示")
	private Integer deptCheckStrictly;
	/**
	 * 角色状态（0正常 1停用）
	 */
	@ApiModelProperty("角色状态（0正常 1停用）")
	private String status;
	/**
	 * 删除标志（0代表存在 2代表删除）
	 */
	@TableLogic
	private Integer delFlag;

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		SysRoleEntity that = (SysRoleEntity) o;
		return Objects.equals(roleId, that.roleId) &&
						Objects.equals(roleName, that.roleName) &&
						Objects.equals(roleKey, that.roleKey);
	}

	@Override
	public int hashCode() {
		return Objects.hash(roleId, roleName, roleKey);
	}
}
